前言
前一天學習了 Relative Path(相對路徑)的概念。
當時我們使用 challenge/run 來執行程式。
這種寫法會根據目前工作目錄(Current Working Directory)來尋找目標檔案。
而今天的 Challenge 則進一步介紹 Linux 路徑中的特殊符號 .,雖然只有一個點,但它在 Linux 中有非常重要的意義,也是之後撰寫 Shell Script、執行程式以及進行系統操作時經常會看到的符號。
.?在 Linux 中 . 代表**Current Directory(目前目錄)**也就是目前工作目錄本身。
例如假設目前位於 / 那麼 . 實際上就代表 /。
.?前一天我們使用 challenge/run 執行程式。
其實也可以寫成 ./challenge/run,兩者的意思完全相同。
因為 . = 目前所在目錄
因此 ./challenge/run
可以理解成 目前目錄/challenge/run
如果目前位於 /
那麼 ./challenge/run
實際上等同於 / + challenge/run = /challenge/run
這次 Challenge 提到每個 Linux 目錄中都存在兩個特殊的路徑.,..
其中 . 代表目前目錄。
題目舉例以下路徑其實都代表相同的位置:/challenge/challenge/./challenge/././././/././challenge/./
而以下相對路徑也都相同:challenge./challenge./././challengechallenge/.
這些寫法看起來不同,但最終都會指向同一個目錄。
這次 Challenge 要求先將目前工作目錄切換到 cd /
接著必須使用.開頭的 Relative Path 執行程式。
因此不能使用 challenge/run
而要使用 ./challenge/run
執行後成功完成 Challenge 並取得 Flag。
這也是第一次實際在 Linux 路徑中使用 .。
challenge/run 與 ./challenge/run 的差異假設目前位於 / 那麼 challenge/run 與 ./challenge/run
都會指向 /challenge/run
因此執行結果完全相同。
差別在於
| 寫法 | 說明 |
|---|---|
challenge/run |
隱式相對路徑(Implicit Relative Path) |
./challenge/run |
顯式相對路徑(Explicit Relative Path) |
加入 . 後,可以更明確表示我要從目前目錄開始尋找。
今天第一次接觸 Linux 路徑中的特殊符號 .。
一開始看到題目時,覺得只是多打一個點而已,但實際理解後才知道,這個點其實代表目前所在的位置。
透過這次 Challenge,我也發現 Linux 的路徑系統比想像中更靈活。
同一個目錄可以透過不同方式表示,而系統最終都能解析到相同的位置。
雖然目前學到的內容仍然屬於基礎操作,但這些概念未來在 Shell Script、程式執行以及資安工具使用上都會經常出現,因此提早理解它們的意義非常重要。